home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gas_251.zip / bin_251 / bfd / coff-h8300.c < prev    next >
C/C++ Source or Header  |  1994-10-04  |  17KB  |  614 lines

  1. /* BFD back-end for Hitachi H8/300 COFF binaries.
  2.    Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
  3.    Written by Steve Chamberlain, <sac@cygnus.com>.
  4.  
  5. This file is part of BFD, the Binary File Descriptor library.
  6.  
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21. #include "bfd.h"
  22. #include "sysdep.h"
  23. #include "obstack.h"
  24. #include "libbfd.h"
  25. #include "bfdlink.h"
  26. #include "coff/h8300.h"
  27. #include "coff/internal.h"
  28. #include "libcoff.h"
  29.  
  30. #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
  31.  
  32. static reloc_howto_type howto_table[] =
  33. {
  34.   HOWTO (R_RELBYTE, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "8", true, 0x000000ff, 0x000000ff, false),
  35.   HOWTO (R_RELWORD, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16", true, 0x0000ffff, 0x0000ffff, false),
  36.   HOWTO (R_RELLONG, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "32", true, 0xffffffff, 0xffffffff, false),
  37.   HOWTO (R_PCRBYTE, 0, 0, 8, true, 0, complain_overflow_signed, 0, "DISP8", true, 0x000000ff, 0x000000ff, true),
  38.   HOWTO (R_PCRWORD, 0, 1, 16, true, 0, complain_overflow_signed, 0, "DISP16", true, 0x0000ffff, 0x0000ffff, true),
  39.   HOWTO (R_PCRLONG, 0, 2, 32, true, 0, complain_overflow_signed, 0, "DISP32", true, 0xffffffff, 0xffffffff, true),
  40.   HOWTO (R_MOVB1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16/8", true, 0x0000ffff, 0x0000ffff, false),
  41.   HOWTO (R_MOVB2, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "8/16", true, 0x0000ffff, 0x0000ffff, false),
  42.   HOWTO (R_JMP1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16/pcrel", true, 0x0000ffff, 0x0000ffff, false),
  43.   HOWTO (R_JMP2, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "pcrecl/16", true, 0x000000ff, 0x000000ff, false),
  44.  
  45.  
  46.   HOWTO (R_JMPL1, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "24/pcrell", true, 0x00ffffff, 0x00ffffff, false),
  47.   HOWTO (R_JMPL_B8, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "pc8/24", true, 0x000000ff, 0x000000ff, false),
  48.  
  49.   HOWTO (R_MOVLB1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "24/8", true, 0x0000ffff, 0x0000ffff, false),
  50.   HOWTO (R_MOVLB2, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "8/24", true, 0x0000ffff, 0x0000ffff, false),
  51.  
  52. };
  53.  
  54.  
  55. /* Turn a howto into a reloc number */
  56.  
  57. #define SELECT_RELOC(x,howto) \
  58.   { x.r_type = select_reloc(howto); }
  59.  
  60. #define BADMAG(x) (H8300BADMAG(x)&& H8300HBADMAG(x))
  61. #define H8300 1            /* Customize coffcode.h */
  62. #define __A_MAGIC_SET__
  63.  
  64.  
  65.  
  66. /* Code to swap in the reloc */
  67. #define SWAP_IN_RELOC_OFFSET   bfd_h_get_32
  68. #define SWAP_OUT_RELOC_OFFSET bfd_h_put_32
  69. #define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) \
  70.   dst->r_stuff[0] = 'S'; \
  71.   dst->r_stuff[1] = 'C';
  72.  
  73.  
  74. static int
  75. select_reloc (howto)
  76.      reloc_howto_type *howto;
  77. {
  78.   return howto->type;
  79. }
  80.  
  81. /* Code to turn a r_type into a howto ptr, uses the above howto table
  82.    */
  83.  
  84. static void
  85. rtype2howto (internal, dst)
  86.      arelent *internal;
  87.      struct internal_reloc *dst;
  88. {
  89.   switch (dst->r_type)
  90.     {
  91.     case R_RELBYTE:
  92.       internal->howto = howto_table + 0;
  93.       break;
  94.     case R_RELWORD:
  95.       internal->howto = howto_table + 1;
  96.       break;
  97.     case R_RELLONG:
  98.       internal->howto = howto_table + 2;
  99.       break;
  100.     case R_PCRBYTE:
  101.       internal->howto = howto_table + 3;
  102.       break;
  103.     case R_PCRWORD:
  104.       internal->howto = howto_table + 4;
  105.       break;
  106.     case R_PCRLONG:
  107.       internal->howto = howto_table + 5;
  108.       break;
  109.     case R_MOVB1:
  110.       internal->howto = howto_table + 6;
  111.       break;
  112.     case R_MOVB2:
  113.       internal->howto = howto_table + 7;
  114.       break;
  115.     case R_JMP1:
  116.       internal->howto = howto_table + 8;
  117.       break;
  118.     case R_JMP2:
  119.       internal->howto = howto_table + 9;
  120.       break;
  121.     case R_JMPL1:
  122.       internal->howto = howto_table + 10;
  123.       break;
  124.     case R_JMPL_B8:
  125.       internal->howto = howto_table + 11;
  126.       break;
  127.     case R_MOVLB1:
  128.       internal->howto = howto_table + 12;
  129.       break;
  130.     case R_MOVLB2:
  131.       internal->howto = howto_table + 13;
  132.       break;
  133.     default:
  134.       fprintf (stderr, "Bad reloc\n");
  135.       break;
  136.     }
  137. }
  138.  
  139. #define RTYPE2HOWTO(internal, relocentry) rtype2howto(internal,relocentry)
  140.  
  141.  
  142. /* Perform any necessaru magic to the addend in a reloc entry */
  143.  
  144.  
  145. #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
  146.  cache_ptr->addend =  ext_reloc.r_offset;
  147.  
  148.  
  149. #define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \
  150.  reloc_processing(relent, reloc, symbols, abfd, section)
  151.  
  152. static void
  153. reloc_processing (relent, reloc, symbols, abfd, section)
  154.      arelent * relent;
  155.      struct internal_reloc *reloc;
  156.      asymbol ** symbols;
  157.      bfd * abfd;
  158.      asection * section;
  159. {
  160.   relent->address = reloc->r_vaddr;
  161.   rtype2howto (relent, reloc);
  162.  
  163.   if (((int) reloc->r_symndx) > 0)
  164.     {
  165.       relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
  166.     }
  167.   else
  168.     {
  169.       relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
  170.     }
  171.  
  172.  
  173.  
  174.   relent->addend = reloc->r_offset;
  175.  
  176.   relent->address -= section->vma;
  177.   /*  relent->section = 0;*/
  178. }
  179.  
  180.  
  181. static int
  182. h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
  183.      bfd *abfd;
  184.      asection *input_section;
  185.      arelent *reloc;
  186.      unsigned int shrink;
  187.      struct bfd_link_info *link_info;
  188. {
  189.   bfd_vma value;  
  190.   bfd_vma dot;
  191.   bfd_vma gap;
  192.  
  193.   /* The address of the thing to be relocated will have moved back by 
  194.    the size of the shrink  - but we don't change reloc->address here,
  195.    since we need it to know where the relocation lives in the source
  196.    uncooked section */
  197.  
  198.   /*  reloc->address -= shrink;   conceptual */
  199.  
  200.   bfd_vma address = reloc->address - shrink;
  201.   
  202.  
  203.   switch (reloc->howto->type)
  204.     {     
  205.     case R_MOVB2:
  206.     case R_JMP2:
  207.       shrink+=2;
  208.       break;
  209.  
  210.       /* Thing is a move one byte */
  211.     case R_MOVB1:
  212.       value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
  213.  
  214.       if (value >= 0xff00)
  215.     { 
  216.  
  217.       /* Change the reloc type from 16bit, possible 8 to 8bit
  218.          possible 16 */
  219.       reloc->howto = reloc->howto + 1;      
  220.       /* The place to relc moves back by one */
  221.       /* This will be two bytes smaller in the long run */
  222.       shrink +=2 ;
  223.       bfd_perform_slip(abfd, 2, input_section, address);
  224.     }      
  225.  
  226.       break;
  227.       /* This is the 24 bit branch which could become an 8 bitter, 
  228.        the relocation points to the first byte of the insn, not the
  229.        actual data */
  230.  
  231.     case R_JMPL1:
  232.       value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
  233.     
  234.       dot = input_section->output_section->vma +
  235.     input_section->output_offset + address;
  236.   
  237.       /* See if the address we're looking at within 127 bytes of where
  238.      we are, if so then we can use a small branch rather than the
  239.      jump we were going to */
  240.  
  241.       gap = value - dot ;
  242.   
  243.       if (-120 < (long)gap && (long)gap < 120 )
  244.     { 
  245.  
  246.       /* Change the reloc type from 24bit, possible 8 to 8bit
  247.          possible 32 */
  248.       reloc->howto = reloc->howto + 1;      
  249.       /* This will be two bytes smaller in the long run */
  250.       shrink +=2 ;
  251.       bfd_perform_slip(abfd, 2, input_section, address);
  252.     }
  253.       break;
  254.  
  255.     case R_JMP1:
  256.  
  257.       value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
  258.     
  259.       dot = input_section->output_section->vma +
  260.     input_section->output_offset + address;
  261.   
  262.       /* See if the address we're looking at within 127 bytes of where
  263.      we are, if so then we can use a small branch rather than the
  264.      jump we were going to */
  265.  
  266.       gap = value - (dot - shrink);
  267.   
  268.  
  269.       if (-120 < (long)gap && (long)gap < 120 )
  270.     { 
  271.  
  272.       /* Change the reloc type from 16bit, possible 8 to 8bit
  273.          possible 16 */
  274.       reloc->howto = reloc->howto + 1;      
  275.       /* The place to relc moves back by one */
  276.  
  277.       /* This will be two bytes smaller in the long run */
  278.       shrink +=2 ;
  279.       bfd_perform_slip(abfd, 2, input_section, address);
  280.     }
  281.       break;
  282.     }
  283.  
  284.   
  285.   return shrink;
  286. }
  287.  
  288.  
  289. /* First phase of a relaxing link */
  290.  
  291. /* Reloc types
  292.    large        small
  293.    R_MOVB1        R_MOVB2        mov.b with 16bit or 8 bit address
  294.    R_JMP1        R_JMP2        jmp or pcrel branch
  295.    R_JMPL1        R_JMPL_B8    24jmp or pcrel branch
  296.    R_MOVLB1        R_MOVLB2    24 or 8 bit reloc for mov.b
  297.  
  298. */
  299.  
  300. static void
  301. h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
  302.                dst_ptr)
  303.      bfd *abfd;
  304.      struct bfd_link_info *link_info;
  305.      struct bfd_link_order *link_order;
  306.      arelent *reloc;
  307.      bfd_byte *data;
  308.      unsigned int *src_ptr;
  309.      unsigned int *dst_ptr;
  310. {
  311.   unsigned int src_address = *src_ptr;
  312.   unsigned int dst_address = *dst_ptr;
  313.   asection *input_section = link_order->u.indirect.section;
  314.  
  315.   switch (reloc->howto->type)
  316.     {
  317.       /* A 24 bit branch which could be a 8 bit pcrel, really pointing to
  318.      the byte before the 24bit hole, so we can treat it as a 32bit pointer */
  319.     case R_PCRBYTE:
  320.       {
  321.     bfd_vma dot = link_order->offset 
  322.       + dst_address 
  323.         + link_order->u.indirect.section->output_section->vma;
  324.     int gap = (bfd_coff_reloc16_get_value (reloc, link_info, input_section)
  325.            - dot);
  326.     if (gap > 127 || gap < -128)
  327.       {
  328.         if (! ((*link_info->callbacks->reloc_overflow)
  329.            (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr),
  330.             reloc->howto->name, reloc->addend, input_section->owner,
  331.             input_section, reloc->address)))
  332.           abort ();
  333.       }
  334.  
  335.     bfd_put_8 (abfd, gap, data + dst_address);
  336.     dst_address++;
  337.     src_address++;
  338.  
  339.     break;
  340.       }
  341.     case R_PCRWORD:
  342.       {
  343.     bfd_vma dot = link_order->offset 
  344.       + dst_address 
  345.         + link_order->u.indirect.section->output_section->vma;
  346.     int gap = (bfd_coff_reloc16_get_value (reloc, link_info, input_section)
  347.            - dot) - 1;
  348.     if (gap > 32767 || gap < -32768)
  349.       {
  350.         if (! ((*link_info->callbacks->reloc_overflow)
  351.            (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr),
  352.             reloc->howto->name, reloc->addend, input_section->owner,
  353.             input_section, reloc->address)))
  354.           abort ();
  355.       }
  356.  
  357.     bfd_put_16 (abfd, gap, data + dst_address);
  358.     dst_address+=2;
  359.     src_address+=2;
  360.  
  361.     break;
  362.       }
  363.  
  364.     case R_RELBYTE:
  365.       {
  366.     unsigned int gap = bfd_coff_reloc16_get_value (reloc, link_info,
  367.                                input_section);
  368.     if (gap < 0xff 
  369.         || (gap >= 0x0000ff00
  370.             && gap <= 0x0000ffff)
  371.           || (   gap >= 0x00ffff00 
  372.         && gap <= 0x00ffffff)
  373.         || (   gap >= 0xffffff00
  374.         && gap <= 0xffffffff))
  375.       {
  376.         bfd_put_8 (abfd, gap, data + dst_address);
  377.         dst_address += 1;
  378.         src_address += 1;
  379.       }
  380.     else
  381.       {
  382.         if (! ((*link_info->callbacks->reloc_overflow)
  383.            (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr),
  384.             reloc->howto->name, reloc->addend, input_section->owner,
  385.             input_section, reloc->address)))
  386.           abort ();
  387.       }
  388.       }
  389.       break;
  390.     case R_JMP1:
  391.       /* A relword which would have like to have been a pcrel */
  392.     case R_MOVB1:
  393.       /* A relword which would like to have been modified but
  394.          didn't make it */
  395.     case R_RELWORD:
  396.       bfd_put_16 (abfd,
  397.           bfd_coff_reloc16_get_value (reloc, link_info, input_section),
  398.           data + dst_address);
  399.       dst_address += 2;
  400.       src_address += 2;
  401.       break;
  402.     case R_RELLONG:
  403.       bfd_put_32 (abfd,
  404.           bfd_coff_reloc16_get_value (reloc, link_info, input_section),
  405.           data + dst_address);
  406.       dst_address += 4;
  407.       src_address += 4;
  408.       break;
  409.  
  410.     case R_MOVB2:
  411.       /* Special relaxed type, there will be a gap between where we
  412.          get stuff from and where we put stuff to now
  413.     
  414.          for a mov.b @aa:16 -> mov.b @aa:8
  415.          opcode 0x6a 0x0y offset
  416.          ->     0x2y off
  417.          */
  418.       if (data[dst_address - 1] != 0x6a)
  419.     abort ();
  420.       switch (data[src_address] & 0xf0)
  421.     {
  422.     case 0x00:
  423.       /* Src is memory */
  424.       data[dst_address - 1] = (data[src_address] & 0xf) | 0x20;
  425.       break;
  426.     case 0x80:
  427.       /* Src is reg */
  428.       data[dst_address - 1] = (data[src_address] & 0xf) | 0x30;
  429.       break;
  430.     default:
  431.       abort ();
  432.     }
  433.  
  434.       /* the offset must fit ! after all, what was all the relaxing
  435.          about ? */
  436.  
  437.       bfd_put_8 (abfd,
  438.          bfd_coff_reloc16_get_value (reloc, link_info, input_section),
  439.          data + dst_address);
  440.  
  441.       /* Note the magic - src goes up by two bytes, but dst by only
  442.          one */
  443.       dst_address += 1;
  444.       src_address += 3;
  445.  
  446.       break;
  447.  
  448.     case R_JMP2:
  449.       
  450.       /* Speciial relaxed type */
  451.       {
  452.     bfd_vma dot = link_order->offset
  453.     + dst_address
  454.     + link_order->u.indirect.section->output_section->vma;
  455.  
  456.     int gap = (bfd_coff_reloc16_get_value (reloc, link_info, input_section)
  457.            - dot - 1);
  458.  
  459.     if ((gap & ~0xff) != 0 && ((gap & 0xff00) != 0xff00))
  460.       abort ();
  461.  
  462.     bfd_put_8 (abfd, gap, data + dst_address);
  463.  
  464.     switch (data[dst_address - 1])
  465.       {
  466.       case 0x5e:
  467.         /* jsr -> bsr */
  468.         bfd_put_8 (abfd, 0x55, data + dst_address - 1);
  469.         break;
  470.       case 0x5a:
  471.         /* jmp ->bra */
  472.         bfd_put_8 (abfd, 0x40, data + dst_address - 1);
  473.         break;
  474.  
  475.       default:
  476.         abort ();
  477.       }
  478.     dst_address++;
  479.     src_address += 3;
  480.  
  481.     break;
  482.       }
  483.       break;
  484.       
  485.     case R_JMPL_B8: /* 24 bit branch which is now 8 bits */
  486.       
  487.       /* Speciial relaxed type */
  488.       {
  489.     bfd_vma dot = link_order->offset
  490.     + dst_address
  491.     + link_order->u.indirect.section->output_section->vma;
  492.  
  493.     int gap = (bfd_coff_reloc16_get_value (reloc, link_info, input_section)
  494.            - dot - 2);
  495.  
  496.     if ((gap & ~0xff) != 0 && ((gap & 0xff00) != 0xff00))
  497.       abort ();
  498.  
  499.     switch (data[src_address])
  500.       {
  501.       case 0x5e:
  502.         /* jsr -> bsr */
  503.         bfd_put_8 (abfd, 0x55, data + dst_address);
  504.         break;
  505.       case 0x5a:
  506.         /* jmp ->bra */
  507.         bfd_put_8 (abfd, 0x40, data + dst_address);
  508.         break;
  509.  
  510.       default:
  511.         bfd_put_8 (abfd, 0xde, data + dst_address);
  512.         break;
  513.       }
  514.  
  515.     bfd_put_8 (abfd, gap, data + dst_address + 1);
  516.     dst_address += 2;
  517.     src_address += 4;
  518.  
  519.     break;
  520.       }
  521.  
  522.     case R_JMPL1:
  523.       {
  524.     int v = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
  525.     int o = bfd_get_32 (abfd, data + src_address);
  526.     v = (v & 0x00ffffff) | (o & 0xff000000);
  527.     bfd_put_32 (abfd, v, data + dst_address);
  528.     dst_address += 4;
  529.     src_address += 4;
  530.       }
  531.  
  532.       break;
  533.  
  534.  
  535.       /* A 24 bit mov  which could be an 8 bit move, really pointing to
  536.      the byte before the 24bit hole, so we can treat it as a 32bit pointer */
  537.     case R_MOVLB1:
  538.       {
  539.     int v = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
  540.     int o = bfd_get_32 (abfd, data + dst_address);
  541.     v = (v & 0x00ffffff) | (o & 0xff000000);
  542.     bfd_put_32 (abfd, v, data + dst_address);
  543.     dst_address += 4;
  544.     src_address += 4;
  545.       }
  546.  
  547.       break;
  548.     default:
  549.  
  550.       abort ();
  551.       break;
  552.  
  553.     }
  554.   *src_ptr = src_address;
  555.   *dst_ptr = dst_address;
  556.  
  557. }
  558.  
  559. #define coff_reloc16_extra_cases h8300_reloc16_extra_cases
  560. #define coff_reloc16_estimate h8300_reloc16_estimate
  561.  
  562. #include "coffcode.h"
  563.  
  564.  
  565. #undef coff_bfd_get_relocated_section_contents
  566. #undef coff_bfd_relax_section
  567. #define coff_bfd_get_relocated_section_contents \
  568.   bfd_coff_reloc16_get_relocated_section_contents
  569. #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
  570.  
  571.  
  572.  
  573. const bfd_target h8300coff_vec =
  574. {
  575.   "coff-h8300",            /* name */
  576.   bfd_target_coff_flavour,
  577.   true,                /* data byte order is big */
  578.   true,                /* header byte order is big */
  579.  
  580.   (HAS_RELOC | EXEC_P |        /* object flags */
  581.    HAS_LINENO | HAS_DEBUG |
  582.    HAS_SYMS | HAS_LOCALS | WP_TEXT | BFD_IS_RELAXABLE ),
  583.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC),    /* section flags */
  584.   '_',                /* leading char */
  585.   '/',                /* ar_pad_char */
  586.   15,                /* ar_max_namelen */
  587.   1,                /* minimum section alignment */
  588.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  589.   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  590.   bfd_getb16, bfd_getb_signed_16, bfd_putb16,    /* data */
  591.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  592.   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  593.   bfd_getb16, bfd_getb_signed_16, bfd_putb16,    /* hdrs */
  594.  
  595.   {_bfd_dummy_target, coff_object_p,    /* bfd_check_format */
  596.    bfd_generic_archive_p, _bfd_dummy_target},
  597.   {bfd_false, coff_mkobject, _bfd_generic_mkarchive,    /* bfd_set_format */
  598.    bfd_false},
  599.   {bfd_false, coff_write_object_contents,    /* bfd_write_contents */
  600.    _bfd_write_archive_contents, bfd_false},
  601.  
  602.      BFD_JUMP_TABLE_GENERIC (coff),
  603.      BFD_JUMP_TABLE_COPY (coff),
  604.      BFD_JUMP_TABLE_CORE (_bfd_nocore),
  605.      BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
  606.      BFD_JUMP_TABLE_SYMBOLS (coff),
  607.      BFD_JUMP_TABLE_RELOCS (coff),
  608.      BFD_JUMP_TABLE_WRITE (coff),
  609.      BFD_JUMP_TABLE_LINK (coff),
  610.      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
  611.  
  612.   COFF_SWAP_TABLE,
  613. };
  614.